001 /**
002 * Created by IntelliJ IDEA.
003 * User: Wei Wang
004 * Date: Jan 13, 2003
005 * Time: 8:50:35 PM
006 */
007
008 package EVolve.util;
009
010 import java.util.*;
011
012 public class StackMerger {
013 private int interval;
014 private int counter;
015 private int result[];
016
017 public StackMerger(int interval) {
018 this.interval = interval;
019 counter = 1;
020 result = new int[100];
021 for (int i=0; i<result.length; i++) result[i] = -1;
022 }
023
024 private void enlarge() {
025 int[] temp = new int[result.length+50];
026 for (int i=0; i<temp.length; i++) {
027 if (i<result.length) {
028 temp[i] = result[i];
029 } else {
030 temp[i] = -1;
031 }
032 }
033 }
034
035 private void reset() {
036 counter = 1;
037 for (int i=0; i<result.length; i++) result[i] = -1;
038 }
039
040 public Stack next(Stack stack) {
041 int oldId, newId;
042 if (counter < interval) {
043 if (stack.size() > result.length) enlarge();
044 for (int i=0; i<stack.size(); i++) {
045 newId = ((Integer)stack.get(i)).intValue();
046 if (result[i] != -1) {
047 oldId = result[i];
048 if (oldId != newId) result[i] = -2;
049 } else {
050 result[i] = newId;
051 }
052 }
053 return null;
054 } else {
055 int i = 0;
056 Stack retVal = new Stack();
057 while ((i<result.length)&&(result[i]!=-1)) {
058 retVal.push(new Integer(result[i++]));
059 }
060 reset();
061 return retVal;
062 }
063
064 }
065 }